﻿/*
    Regex Manager
    정보를 얻는 패턴 혹은 사이트가 바뀜에 대비함

    /Data/patterns.txt를 참조함
 */

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.IsolatedStorage;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;

namespace Baseball.Infrastructure
{
    public static class ParseInformation
    {
        static string XmlUri = "Data/ParseInformation.xml";

        static ParseInformation()
        {
            Load();
        }

        static void Load() {
            // 스토리지에 없을 경우를 대비해서 복사해주고
            if (StorageManager.CopyDataToStorageAsync(XmlUri, XmlUri, false))
            {
                // 스토리지에 있는 XML 파일을 열어서 멤버들에 복사한다.
                using (var Storage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (var Stream = Storage.OpenFile(XmlUri, FileMode.Open))
                    {
                        using (XmlReader Reader = XmlReader.Create(Stream))
                        {
                            XElement Root = XDocument.Load(Reader).Root;

                            XElement Game = Root.Element("Game");
                            GameSite = Game.Element("Site").Value;
                            GameContainer = new Regex(Game.Element("Container").Value);
                            GameStatus = new Regex(Game.Element("Status").Value);
                            GamePlaceTime = new Regex(Game.Element("PlaceTime").Value);

                            XElement Team = Game.Element("Team");
                            GameTeamContainer = new Regex(Team.Element("Container").Value);
                            GameTeam = new Regex(Team.Element("Name").Value);
                            GameTeamScore = new Regex(Team.Element("Score").Value);
                            GameTeamFirstPitcher = new Regex(Team.Element("FirstPitcher").Value);
                            GameTeamWinPitcherContainer = new Regex(Team.Element("WinPitcherContainer").Value);
                            GameTeamWinPitcher = new Regex(Team.Element("WinPitcher").Value);
                            GameTeamInningScoreTableRow = new Regex(Team.Element("ScoreTableRow").Value);
                            GameTeamInningScoreTableData = new Regex(Team.Element("ScoreTableData").Value);

                            XElement Etc = Root.Element("Etc");
                            Span = new Regex(Etc.Element("Span").Value);
                        }
                    }
                }
            }
        }

        #region Regex

        // 경기 결과
        public static string GameSite { get; private set; } // 사이트
        public static Regex GameContainer { get; private set; }
        public static Regex GameStatus { get; private set; } // 상태
        public static Regex GamePlaceTime { get; private set; } // 경기장

        public static Regex GameTeamContainer { get; private set; } 
        public static Regex GameTeam { get; private set; } // 이름
        public static Regex GameTeamScore { get; private set; } // 점수
        public static Regex GameTeamFirstPitcher { get; private set; } // 선발투수
        public static Regex GameTeamWinPitcherContainer { get; private set; } // 승패세 투수 컨테이너
        public static Regex GameTeamWinPitcher { get; private set; } // 승패세 투수
        public static Regex GameTeamInningScoreTableRow { get; private set; } // 이닝별 점수 테이블 Row
        public static Regex GameTeamInningScoreTableData { get; private set; } // 이닝별 점수 테이블 Data


        // 기타
        public static Regex Span { get; private set; } // span 요소

        #endregion
    }
}
